package cn.iocoder.yudao.module.system.dal.dataobject.useractivity;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户每日活跃明细 DO
 *
 * @author 系统开发团队
 */
@TableName("ai_user_daily_activity")
@KeySequence("ai_user_daily_activity_seq")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserDailyActivityDO extends BaseDO {

    /**
     * 主键ID
     */
    @TableId
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 用户类型：1-管理员用户，2-会员用户
     */
    private Integer userType;

    /**
     * 活跃日期
     */
    private LocalDate activityDate;

    // ========== 活跃行为统计 ==========
    /**
     * 是否活跃：0-否，1-是
     */
    private Boolean isActive;

    /**
     * 是否新用户：0-否，1-是
     */
    private Boolean isNewUser;

    /**
     * 登录次数
     */
    private Integer loginCount;

    /**
     * 首次登录时间
     */
    private LocalDateTime firstLoginTime;

    /**
     * 最后登录时间
     */
    private LocalDateTime lastLoginTime;

    /**
     * 在线时长（分钟）
     */
    private Integer onlineDuration;

    // ========== 功能使用统计 ==========
    /**
     * 页面浏览次数
     */
    private Integer pageViews;

    /**
     * API调用次数
     */
    private Integer apiCalls;

    /**
     * 功能使用次数
     */
    private Integer featureUsageCount;

    // ========== 设备和地域信息 ==========
    /**
     * 设备类型：PC/Mobile/Tablet
     */
    private String deviceType;

    /**
     * 浏览器类型
     */
    private String browserType;

    /**
     * 操作系统类型
     */
    private String osType;

    /**
     * IP地址
     */
    private String ipAddress;

    /**
     * 地域信息
     */
    private String region;

    /**
     * 城市信息
     */
    private String city;

    // ========== 连续活跃天数 ==========
    /**
     * 连续活跃天数
     */
    private Integer consecutiveDays;

    /**
     * 总活跃天数
     */
    private Integer totalActiveDays;

    // ========== 用户类型常量 ==========
    public static final int USER_TYPE_ADMIN = 1; // 管理员用户
    public static final int USER_TYPE_MEMBER = 2; // 会员用户

    // ========== 设备类型常量 ==========
    public static final String DEVICE_TYPE_PC = "PC";
    public static final String DEVICE_TYPE_MOBILE = "Mobile";
    public static final String DEVICE_TYPE_TABLET = "Tablet";
}